Previous topicNext topic
Help > Debugging PB/Win Programs > Debugging a simple program >
TWORD.bas Source Listing

'=============================================================================

'

'  Test Word (Debugging) example for PowerBASIC for Windows

'  Copyright (c) 1998-2011 PowerBASIC, Inc.

'  All Rights Reserved.

'

'  Read a text file and count the number of words of length 1, 2, 3, and so

'  on. THIS PROGRAM CONTAINS INTENTIONAL BUGS. Use it in conjunction with the

'  PowerBasic On-line help (PBWIN.CHM - "Debugging PowerBASIC Programs") to

'  learn about the PowerBasic integrated debugger.

'

'=============================================================================

#COMPILER PBWIN 10

#COMPILE EXE

#IF NOT %DEF(%WINAPI)

   DECLARE FUNCTION GetModuleFileName LIB "KERNEL32.DLL" ALIAS "GetModuleFileNameA" (BYVAL hModule AS LONG, lpFileName AS ASCIIZ, BYVAL nSize AS LONG) AS LONG

   %MB_YESNO = &H00000004&

   %IDNO = 7

#ENDIF

DEFLNG A-Z

FUNCTION AppPath () AS STRING

   LOCAL p AS ASCIIZ * 256

   LOCAL ix AS LONG

   GetModuleFileName 0, p, SIZEOF(p)

   FOR ix = LEN(p) TO 1 STEP -1

       IF MID$(p, ix, 1) = "\" OR MID$(p, ix, 1) = "/" THEN

           FUNCTION = LEFT$(p, ix)

           EXIT FUNCTION

       END IF

   NEXT

 FUNCTION = ""

END FUNCTION

FUNCTION PBMAIN () AS LONG

   MaxWordLen = 16             ' count words up to a length of 16 characters

                               ' longer words will go into Overlong

   DIM WordLength(MaxWordLen)  ' the array used to hold the counts

   Blank$ = CHR$(32)           ' a space marks the end of a word.

   FilePath$ = AppPath

   IF LEN(FilePath$) THEN

       CHDRIVE FilePath$

       CHDIR FilePath$

   END IF

   WHILE InFile$ = ""

       InFile$ = INPUTBOX$("Enter the name of the input file: ")

       IF InFile$ <= SPACE$(LEN(InFile$)) THEN InFile$=""

       IF InFile$ = "" _

       AND MSGBOX ("No file name entered! Do you want to try again?", _

                     %MB_YESNO, _

                     "TWord input") = %IDNO THEN

          EXIT FUNCTION

       END IF

   WEND

   ERRCLEAR

   OPEN InFile$ FOR INPUT AS #1

   'If the file can't be opened, give the user an error message.

   IF ERR THEN

       MSGBOX InFile$,,"Unable to open file"

       EXIT FUNCTION

   END IF

   WHILE NOT(EOF(1))              ' read the file until nothing is left

       LINE INPUT #1,FirstString$ ' get a line

       MSGBOX FirstString$        ' display it

       WHILE FirstString$ <> ""

           GOSUB GetAWord         ' pull a word for FirstString$ and

                                  ' put it in SecondString$

           Test = LEN(SecondString$)

           IF Test <= 16 THEN

               WordLength(Test) = WordLength(Test) + 1

           ELSE

               Overlong = Overlong + 1

           END IF

       WEND

   WEND

   CLOSE 1

   MSGBOX "Length Count"

   FOR Count% = 1 TO 16

       MSGBOX FORMAT$(Count%) + STR$(WordLength(Count%))

   NEXT

   MSGBOX "Greater" + STR$(OverLong)

   EXIT FUNCTION

GetAWord:

   position = INSTR(FirstString$, Blank$) ' a word is a sequence of

                                          ' characters ended by a

                                          ' blank or the end of the line

   IF position = 0 THEN

       'the word is the remainder of the line

       SecondString$ = FirstString$

       FirstString$ = ""

   ELSE

       'pull the word from the line

       SecondString$ = LEFT$(FirstString$, position - 1)

   END IF

   RETURN

END FUNCTION